/*
 * Copyright (c) 2024 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (theLicense");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *      http://www.apache.org/licenses/LICENSE-20
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "ViewShotTurboModule.h"

using namespace rnoh;
using namespace facebook;

static jsi::Value _hostFunction_ViewShotTurboModuleSpecJSI_captureRef(
    jsi::Runtime &rt,
    react::TurboModule &turboModule,
    const jsi::Value *args,
    size_t count)
{
    return static_cast<ArkTSTurboModule &>(turboModule).callAsync(rt, "captureRef", args, count);
}

static jsi::Value _hostFunction_ViewShotTurboModuleSpecJSI_captureScreen(
    jsi::Runtime &rt,
    react::TurboModule &turboModule,
    const jsi::Value *args,
    size_t count)
{
    return static_cast<ArkTSTurboModule &>(turboModule).callAsync(rt, "captureScreen", args, count);
}

static jsi::Value _hostFunction_ViewShotTurboModuleSpecJSI_releaseCapture(
    jsi::Runtime &rt,
    react::TurboModule &turboModule,
    const jsi::Value *args,
    size_t count)
{
    return static_cast<ArkTSTurboModule &>(turboModule).call(rt, "releaseCapture", args, count);
}

ViewShotTurboModuleSpecJSI::ViewShotTurboModuleSpecJSI(
    const ArkTSTurboModule::Context ctx,
    const std::string name): ArkTSTurboModule(ctx, name)
{
    methodMap_["captureRef"] =
        MethodMetadata{2, _hostFunction_ViewShotTurboModuleSpecJSI_captureRef};
    methodMap_["captureScreen"] =
        MethodMetadata{1, _hostFunction_ViewShotTurboModuleSpecJSI_captureScreen};
    methodMap_["releaseCapture"] =
        MethodMetadata{0, _hostFunction_ViewShotTurboModuleSpecJSI_releaseCapture};
}